home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / var / lib / python-support / python2.6 / rdflib / syntax / NamespaceManager.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-04-20  |  4.5 KB  |  129 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. from __future__ import generators
  5. from rdflib import URIRef, Literal, RDFS, Variable
  6. from rdflib.syntax.xml_names import split_uri
  7. from urlparse import urljoin, urldefrag
  8. from urllib import pathname2url, url2pathname
  9. import os
  10. import sys
  11. import new
  12.  
  13. class NamespaceManager(object):
  14.     
  15.     def __init__(self, graph):
  16.         self.graph = graph
  17.         self._NamespaceManager__cache = { }
  18.         self._NamespaceManager__log = None
  19.         self.bind('xml', u'http://www.w3.org/XML/1998/namespace')
  20.         self.bind('rdf', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#')
  21.         self.bind('rdfs', 'http://www.w3.org/2000/01/rdf-schema#')
  22.  
  23.     
  24.     def reset(self):
  25.         self._NamespaceManager__cache = { }
  26.  
  27.     
  28.     def __get_store(self):
  29.         return self.graph.store
  30.  
  31.     store = property(__get_store)
  32.     
  33.     def qname(self, uri):
  34.         (prefix, namespace, name) = self.compute_qname(uri)
  35.         if prefix == '':
  36.             return name
  37.         return ':'.join((prefix, name))
  38.  
  39.     
  40.     def normalizeUri(self, rdfTerm):
  41.         """
  42.         Takes an RDF Term and 'normalizes' it into a QName (using the registered prefix)
  43.         or (unlike compute_qname) the Notation 3 form for URIs: <...URI...> 
  44.         """
  45.         
  46.         try:
  47.             (namespace, name) = split_uri(rdfTerm)
  48.             namespace = URIRef(namespace)
  49.         except:
  50.             if isinstance(rdfTerm, Variable):
  51.                 return '?%s' % rdfTerm
  52.             return '<%s>' % rdfTerm
  53.  
  54.         prefix = self.store.prefix(namespace)
  55.         if prefix is None and isinstance(rdfTerm, Variable):
  56.             return '?%s' % rdfTerm
  57.         if prefix is None:
  58.             return '<%s>' % rdfTerm
  59.         qNameParts = self.compute_qname(rdfTerm)
  60.         return ':'.join([
  61.             qNameParts[0],
  62.             qNameParts[-1]])
  63.  
  64.     
  65.     def compute_qname(self, uri):
  66.         if uri not in self._NamespaceManager__cache:
  67.             (namespace, name) = split_uri(uri)
  68.             namespace = URIRef(namespace)
  69.             prefix = self.store.prefix(namespace)
  70.             if prefix is None:
  71.                 prefix = '_%s' % len(list(self.store.namespaces()))
  72.                 self.bind(prefix, namespace)
  73.             
  74.             self._NamespaceManager__cache[uri] = (prefix, namespace, name)
  75.         
  76.         return self._NamespaceManager__cache[uri]
  77.  
  78.     
  79.     def bind(self, prefix, namespace, override = True):
  80.         namespace = URIRef(namespace)
  81.         if prefix is None:
  82.             prefix = ''
  83.         
  84.         bound_namespace = self.store.namespace(prefix)
  85.         if bound_namespace and bound_namespace != namespace:
  86.             if not prefix:
  87.                 prefix = 'default'
  88.             
  89.             num = 1
  90.             while None:
  91.                 new_prefix = '%s%s' % (prefix, num)
  92.                 if not self.store.namespace(new_prefix):
  93.                     break
  94.                 
  95.                 num += 1
  96.                 continue
  97.         bound_namespace != namespace
  98.         bound_prefix = self.store.prefix(namespace)
  99.         if bound_prefix is None:
  100.             self.store.bind(prefix, namespace)
  101.         elif bound_prefix == prefix:
  102.             pass
  103.         elif override or bound_prefix.startswith('_'):
  104.             self.store.bind(prefix, namespace)
  105.         
  106.  
  107.     
  108.     def namespaces(self):
  109.         for prefix, namespace in self.store.namespaces():
  110.             namespace = URIRef(namespace)
  111.             yield (prefix, namespace)
  112.         
  113.  
  114.     
  115.     def absolutize(self, uri, defrag = 1):
  116.         base = urljoin('file:', pathname2url(os.getcwd()))
  117.         result = urljoin('%s/' % base, uri, allow_fragments = not defrag)
  118.         if defrag:
  119.             result = urldefrag(result)[0]
  120.         
  121.         if not defrag:
  122.             if uri and uri[-1] == '#' and result[-1] != '#':
  123.                 result = '%s#' % result
  124.             
  125.         
  126.         return URIRef(result)
  127.  
  128.  
  129.